package com.seele.tigerwallet.api;


import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;

public interface APIService {


    /**
     * @param pushid    推送的识别码
     * @param publickey 钱包公钥地址
     * @param pushway   推送方式：1、极光
     * @return
     */
    @FormUrlEncoded
    @POST("v1/init")
    Call<String> init(
            @Field("pushid") String pushid,
            @Field("publickey") String publickey,
            @Field("pushway") int pushway);


    /**
     * 请求汇率接口
     *
     * @return
     */
    @GET("v1/exchangerate")
    Call<String> exchangerate();


    /**
     * 请求资产接口
     *
     * @param addr   钱包地址
     * @param symbol 逗号分隔，类型： "ETH,EOS"；
     * @return
     */
    @FormUrlEncoded
    @POST("v1/balance/query")
    Call<String> querySymbol(
            @Field("addr") String addr,
            @Field("id") String symbol);


    @GET("v1/balance/query")
    Call<String> getSymbol(
            @Query("addr") String addr,
            @Query("id") String symbol);

    /**
     * 行情列表请求
     *
     * @param id  起始id，默认为0
     * @param num 请求条目数量，最大限制为50
     * @return
     */
    @FormUrlEncoded
    @POST("v1/quotation/list")
    Call<String> quotationList(
            @Field("id") int id,
            @Field("num") int num);


    /**
     * 行情列表请求
     *
     * @param rank rank，默认为0
     * @param num  请求条目数量，最大限制为50
     * @return
     */
    @FormUrlEncoded
    @POST("v1/quotation/list")
    Call<String> quotationRankLis(
            @Field("rank") int rank,
            @Field("num") int num);

    /**
     * 行情动态列表
     *
     * @param symbollist
     * @return
     */
    @FormUrlEncoded
    @POST("v1/quotation/dynamic")
    Call<String> quotationDynamic(
            @Field("idlist") String symbollist);


    /**
     * 行情动态列表
     *
     * @param symbollist
     * @return
     */
    @GET("v1/quotation/dynamic")
    Call<String> getquotationDynamic(
            @Query("idlist") String symbollist);


    /**
     * 查询 symbollist
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/balance/symbollist")
    Call<String> symbollist(
            @Field("id") int id,
            @Field("num") int num);


    /**
     * 查询 symbollist
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/balance/symbollist")
    Call<String> symbollistBylevel(
            @Field("level") int level,
            @Field("num") int num);

    /**
     * 搜索资产
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/balance/search")
    Call<String> searchBalance(
            @Field("keyword") String keyword,
            @Field("id") int id,
            @Field("num") int num);


    /**
     * 搜索行情
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/quotation/search")
    Call<String> searchQuotation(
            @Field("keyword") String keyword,
            @Field("id") int id,
            @Field("num") int num);


    /**
     * 搜索行情
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/quotation/search")
    Call<String> searchQuotationRank(
            @Field("keyword") String keyword,
            @Field("rank") int rank,
            @Field("num") int num);

    /**
     * 获取 nonce
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/transcation/getnonceid")
    Call<String> getNonceid(
            @Field("fromaddr") String fromaddr,
            @Field("symbolid") int symbolid);


    /**
     * 转账
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/transcation/sendtranscation")
    Call<String> sendTranscation(
            @Field("tsdata") String tsdata,
            @Field("symbolid") int symbolid,
            @Field("fromaddr") String fromaddr,
            @Field("note") String note,
            @Field("token") String token,
            @Field("toaddr") String toaddr,
            @Field("value") String value);

    /**
     * 转账状态查询
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/transcation/querytsstaus")
    Call<String> queryTsStaus(
            @Field("tsid") int tsid,
            @Field("symbolid") int symbolid);


    /**
     * 查询交易记录
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/transcation/querytsinfo")
    Call<String> querytTsInfo(
            @Field("tsid") int tsid,
            @Field("symbolid") int symbolid,
            @Field("num") int num,
            @Field("addr") String fromaddr);

    /**
     * 第一次获取
     *
     * @return
     */
    @GET("v1/balance/fixedlist")
    Call<String> balanceFixedlist();

    /**
     * 初始化
     *
     * @return
     */
    @Headers("urlname:init")
    @GET("v1/init")
    Call<String> init();


    /**
     * @param cpu       推送的识别码
     * @param netcard   钱包公钥地址
     * @param idfa      广告标示符
     * @param idfv      Vindor标示符
     * @param imei
     * @param sn        设备序列号
     * @param androidid
     * @return
     */
    @Headers("urlname:login")
    @FormUrlEncoded
    @POST("v1/register")
    Call<String> register(
            @Field("cpu") String cpu,
            @Field("netcard") String netcard,
            @Field("idfa") String idfa,
            @Field("idfv") String idfv,
            @Field("imei") String imei,
            @Field("sn") String sn,
            @Field("v") String androidid
    );


    @Headers("urlname:login")
    @GET("v1/register")
    Call<String> getRegister(
            @Query("cpu") String cpu,
            @Query("netcard") String netcard,
            @Query("idfa") String idfa,
            @Query("idfv") String idfv,
            @Query("imei") String imei,
            @Query("sn") String sn,
            @Query("v") String androidid
    );


    /**
     * @param uuid    用户 uuid
     * @param pushid  推送ID
     * @param pushway 推送方式
     * @return
     */
    @Headers("urlname:login")
    @FormUrlEncoded
    @POST("v1/login")
    Call<String> login(
            @Field("uuid") String uuid,
            @Field("pushid") String pushid,
            @Field("pushway") int pushway);


    /**
     * @param uuid    用户 uuid
     * @param pushid  推送ID
     * @param pushway 推送方式
     * @return
     */
    @Headers("urlname:login")
    @GET("v1/login")
    Call<String> getLogin(
            @Query("uuid") String uuid,
            @Query("pushid") String pushid,
            @Query("pushway") int pushway);


    /**
     * 获取联系人
     *
     * @param publickey
     * @return
     */
    @FormUrlEncoded
    @POST("v1/info/getlinkman")
    Call<String> getlinkman(
            @Field("id") int id,
            @Field("num") int num,
            @Field("publickey") String publickey);


    /**
     * 删除联系人
     *
     * @param publickey
     * @return
     */
    @FormUrlEncoded
    @POST("v1/info/dellinkman")
    Call<String> defined(
            @Field("token") String token,
            @Field("id") String id,
            @Field("publickey") String publickey);


    /**
     * 删除联系人
     *
     * @param publickey
     * @return
     */
    @GET("v1/info/dellinkman")
    Call<String> getDefined(
            @Query("token") String token,
            @Query("id") String id,
            @Query("publickey") String publickey);

    /**
     * @param publickey
     * @param firstname 姓名
     * @param lastname
     * @param toaddr
     * @param phone
     * @param mail
     * @param note
     * @return
     */
    @FormUrlEncoded
    @POST("v1/info/addlinkman")
    Call<String> addlinkman(
            @Field("token") String token,
            @Field("publickey") String publickey,
            @Field("firstname") String firstname,
            @Field("lastname") String lastname,
            @Field("toaddr") String toaddr,
            @Field("phone") String phone,
            @Field("mail") String mail,
            @Field("note") String note);


    /**
     * @param publickey
     * @param firstname 姓名
     * @param lastname
     * @param toaddr
     * @param phone
     * @param mail
     * @param note
     * @return
     */
    @FormUrlEncoded
    @POST("v1/info//updatelinkman")
    Call<String> updatelinkman(
            @Field("token") String token,
            @Field("id") String id,
            @Field("publickey") String publickey,
            @Field("firstname") String firstname,
            @Field("lastname") String lastname,
            @Field("toaddr") String toaddr,
            @Field("phone") String phone,
            @Field("mail") String mail,
            @Field("note") String note);


    /**
     * @param publickey
     * @param firstname 姓名
     * @param lastname
     * @param toaddr
     * @param phone
     * @param mail
     * @param note
     * @return
     */
    @GET("v1/info/addlinkman")
    Call<String> getlinkman(
            @Query("token") String token,
            @Query("publickey") String publickey,
            @Query("firstname") String firstname,
            @Query("lastname") String lastname,
            @Query("toaddr") String toaddr,
            @Query("phone") String phone,
            @Query("mail") String mail,
            @Query("note") String note);


    /**
     * 添加钱包
     *
     * @param publickey
     * @param name
     * @return
     */
    @FormUrlEncoded
    @POST("v1/info/addwallet")
    Call<String> addwallet(
            @Field("token") String token,
            @Field("publickey") String publickey,
            @Field("name") String name);


    /**
     * 获取版本号
     *
     * @return
     */
    @FormUrlEncoded
    @POST("v1/info/getversion")
    Call<String> getversion(
            @Field("ver") String ver
    );

    /**
     * /获取消息
     */
    @FormUrlEncoded
    @POST("v1/msg/get")
    Call<String> getMsg(
            @Field("msgid") long msgid,
            @Field("num") int num);


    /**
     * 获取单笔交易记录
     */
    @FormUrlEncoded
    @POST("v1/transcation/querysingletsinfo")
    Call<String> querySingleTsinfo(
            @Field("tsid") long tsid,
            @Field("tshash") String tshash);


    /**
     * 获取固定行情动态
     */
    @GET("v1/quotation/fixlist")
    Call<String> quotationFixlist();


    /**
     * 获取GAS费用范围
     */
    @FormUrlEncoded
    @POST("v1/balance/gasinfo")
    Call<String> getGasInfo(
            @Field("symbolid") long symbolid);

}
